package com.vepick.metier.requetes;

import java.sql.Connection;
import java.sql.Date;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.List;

import com.vepick.beans.Routines;
import com.vepick.beans.Tache;

public class Requetes_tache {
	/*
	 * Lister toutes les routines
	 */
	public static void afficherLesTaches(Connection conn) throws SQLException {

		List<Tache> lesTaches = new ArrayList<>();
		String requete = "SELECT idtache, idstation, idroutines, seqtache, idtypetache,DATEFINTACHE,tacheannule,nombrevelo,commentairetache FROM TACHE ORDER BY seqtache ASC ";
		Statement stmt = conn.createStatement();
		ResultSet res = stmt.executeQuery(requete);
		while (res.next()) {
			lesTaches.add(new Tache(res.getInt("idTache"), res
					.getInt("idStation"), res.getInt("idRoutines"), res
					.getDouble("seqTache"), res.getInt("idtypetache"),  res
					.getDate("DATEFINTACHE"),res
					.getInt("tacheannule"), res.getInt("nombrevelo"), res
					.getString("commentairetache")));
		}
		res.close();
		for (int j = 0; j < lesTaches.size(); j++) {
			System.out.println("Tache n°" + lesTaches.get(j).getIdTache()
					+ ", station de depart : "
					+ lesTaches.get(j).getIdStation() + ",");

			System.out.println("\n");
		}
	}
	
	/*
	 * Lister toutes les routines
	 */
	public static void afficherLesTachesDuneRoutine(Connection conn, int numRout) throws SQLException {

		List<Tache> lesTaches = new ArrayList<>();
		String requete = "SELECT idtache, idstation, idroutines, seqtache, idtypetache,DATEFINTACHE,tacheannule,nombrevelo,commentairetache FROM  TACHE where idroutines="+numRout+" ORDER BY seqtache ASC ";
		Statement stmt = conn.createStatement();
		ResultSet res = stmt.executeQuery(requete);
		while (res.next()) {
			lesTaches.add(new Tache(res.getInt("idtache"), res
					.getInt("idstation"), res.getInt("idroutines"), res
					.getDouble("seqtache"), res.getInt("idtypetache"),  res
					.getDate("DATEFINTACHE"),res
					.getInt("tacheannule"),
					res.getInt("nombrevelo"), 
					res.getString("commentairetache")));
		}
		res.close();
		for (int j = 0; j < lesTaches.size(); j++) {
			System.out.println("Tache n°" + lesTaches.get(j).getIdTache()
					+ ", seqence: " +lesTaches.get(j).getSeqTache()
					+ ", type tache: " +lesTaches.get(j).getIdTypeTache()
					+ ", nombrevelo: " +lesTaches.get(j).getNombrevelo()
					+ ", station: "
					+ lesTaches.get(j).getIdStation() + ",");

			System.out.println("\n");
		}
	}
	
	
	
	

	/*
	 * Creer une tache
	 */

	public static void enregistrerTache(Connection conn, Tache tache)
			throws SQLException {
		
		PreparedStatement ps = conn
				.prepareStatement("INSERT INTO TACHE (IDTACHE,IDSTATION,IDROUTINES,SEQTACHE,IDTYPETACHE,NOMBREVELO"
						+ ",TACHEANNULE,COMMENTAIRETACHE) "
						+ "VALUES(idTache_seq.nextVal,?,?,?,?,?,?,?)");
		ps.setInt(1, tache.getIdStation());
		ps.setInt(2, tache.getIdRoutines());
		ps.setDouble(3, tache.getSeqTache());
		ps.setInt(4, tache.getIdTypeTache());
		ps.setInt(5, tache.getNombrevelo());

		ps.setInt(6, tache.getTacheAnnule());
		ps.setString(7, tache.getCommentaireTache());
		

		ps.executeUpdate();
		try {
			conn.commit();
		} catch (Exception e) {
			System.out.println("Erreur dans l'ajout d'une tache");
			e.printStackTrace();
		}

		System.out.println("Tache ajoutee avec succes !");

	}
	
	public static int ValiderTache(Connection conn, int idTache) {
		try {
			String requete = "UPDATE Tache SET datefintache = SYSDATE WHERE IDTACHE ="
					+ idTache;
			Statement stmt = conn.createStatement();
			return stmt.executeUpdate(requete);
		} catch (SQLException e) {
			if(e.getErrorCode() == 20013) {
				System.out.println("Impossible de valider cette tache si vous n'avez pas effectue la precedente.");
			} else if(e.getErrorCode() == 20012) {
				System.out.println("Impossible de valider cette tache car la prochaine tache s'effectue dans une station dans laquelle un vehicule de regulation se trouve deja");
			}
		}
		return 0;
	}
	
	public static int AnnulerTache(Connection conn, int idTache) {
		try {
			String requete = "UPDATE Tache SET tacheannule = 1 WHERE IDTACHE ="
					+ idTache;
			Statement stmt = conn.createStatement();
			return stmt.executeUpdate(requete);
		} catch (SQLException e) {
			if(e.getErrorCode() == 20013) {
				System.out.println("Impossible d'annuler cette tache si vous n'avez pas effectue la precedente.");
			} else if(e.getErrorCode() == 20012) {
				System.out.println("Impossible de valider cette tache car la prochaine tache s'effectue dans une station dans laquelle un vehicule de regulation se trouve deja");
			}
		}
		return 0;
	}
}
